package it.uniroma2.art.coda.structures;

import org.apache.uima.jcas.tcas.Annotation;

/**
 * @author Andrea Turbati
 */

public class SuggOntologyCoda {

	Annotation ann;
	// the structure created by the projection disambiguation containing the selected projection rules
	SelectedProjectionRules selProjRules;
	// the structure created by the identity resolution containing the matching between placeholder and
	// ARTURIResourse
	BindLabelToExistingARTURIResource bindLabels;
	// the structure created by the resources smart suggestion containing a suggestion for some placeholders
	ResourcesSmartSuggesterStruct resourcesSmartSuggestionStruct;
	// the structure created by the triples smart suggestion containing the suggestion for some graphStruct
	TriplesSmartSuggestionStruct triplesSmartSuggestionStruct;
	// all the structure returned by CODACore (merging the other structure and adding the missing information)
	CodaFinalSuggestions codaFinalSuggs;

	/**
	 * @param selProjRules
	 *            the selected projection rules
	 * @param bindLabels
	 *            the suggestions from the Identity Resolution Component
	 * @param resSmartSuggsStruct
	 *            the suggestions form the Smart Suggestion Component
	 * @param codaFinalSuggs
	 *            the final suggestions from CODA
	 * @param ann
	 *            the annotation that triggered all these suggestions
	 */
	public SuggOntologyCoda(SelectedProjectionRules selProjRules,
			BindLabelToExistingARTURIResource bindLabels, ResourcesSmartSuggesterStruct resSmartSuggsStruct,
			TriplesSmartSuggestionStruct triSmartSuggsStruct, CodaFinalSuggestions codaFinalSuggs, 
			Annotation ann) {
		this.ann = ann;
		this.selProjRules = selProjRules;
		this.bindLabels = bindLabels;
		this.resourcesSmartSuggestionStruct = resSmartSuggsStruct;
		this.triplesSmartSuggestionStruct = triSmartSuggsStruct;
		this.codaFinalSuggs = codaFinalSuggs;

	}

	/**
	 * Get the selected projection rules
	 * 
	 * @return the selected projection rules
	 */
	public SelectedProjectionRules getSelProjRules() {
		return selProjRules;
	}

	/**
	 * Get the suggestions from the Identity Resolution Component
	 * 
	 * @return the suggestions from the Identity Resolution Component
	 */
	public BindLabelToExistingARTURIResource getBindLabels() {
		return bindLabels;
	}

	/**
	 * Get the suggestions from the resources smart suggestion component
	 * 
	 * @return the suggestions from the resources smart suggestion component
	 */
	public ResourcesSmartSuggesterStruct getResSmartSuggestions() {
		return resourcesSmartSuggestionStruct;
	}
	
	/**
	 * Get the suggestions from the triples smart suggestion component
	 * 
	 * @return the suggestions from the triples smart suggestion component
	 */
	public TriplesSmartSuggestionStruct getTriSmartSuggestions() {
		return triplesSmartSuggestionStruct;
	}

	/**
	 * Get the final CODA suggestions
	 * 
	 * @return the final CODA suggestions
	 */
	public CodaFinalSuggestions getCodaFinalSuggs() {
		return codaFinalSuggs;
	}

	/**
	 * Get the annotation to which all this suggestions belongs to
	 * 
	 * @return the annotation to which all this suggestions belongs to
	 */
	public Annotation getAnnotation() {
		return ann;
	}
}
